#include <allegro.h>
#include <stdlib.h>  //Pour la fonction hasard (rand() )

void intro();
void deplacement();
void creationpomme();
void testqueue();


BITMAP* buffer;
BITMAP* labyrinthe;
int x_pomme;
int y_pomme;
int positionx[100]={400,395,390,385,380,375,370,365,360,355,350,345,340,335,330,325,320,315,310,305,300,295,290,285,280,275,270,265,260,255,250,245};
int positiony[100]={300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300};
int dx=5;  //Pour savoir dans quel sens se deplacer
int dy=0;  //
int i;
int j;
int v=60;
int creation=0;  //pour savoir si il faut creer une pomme ou pas
int apaspomme=1;  //Pour savoir si une pomme existe deja
int score=0;
int longueur=30;  //longueur du serpent
int stop=0;
labx[10];        //coordonnées en x du labyrinthe
int labx2[10];      
int laby[10];       
int laby2[10];      
int longueurlab;   

void intro()
{
 while(!key[KEY_ENTER])
 {
  textprintf(buffer, font,150,150, makecol(100, 255, 100), "Veuiller choisir le labyrinthe ");
  textprintf(buffer, font,250,170, makecol(100, 255, 100), "pas de labyrinthe :  A");
  textprintf(buffer, font,250,190, makecol(100, 255, 100), "Labyrinthe 1 : Z ");
  textprintf(buffer, font,250,210, makecol(100, 255, 100), "Labyrinthe 2 : E ");
  textprintf(buffer, font,150,300, makecol(100, 255, 100), "veuiller choisir la vitesse");
  textprintf(buffer, font,250,320, makecol(100, 255, 100), "lente : q");
  textprintf(buffer, font,250,340, makecol(100, 255, 100), "moyenne : s");
  textprintf(buffer, font,250,360, makecol(100, 255, 100), "rapide : d");
  textprintf(buffer, font,300,400, makecol(0,0,255), "taper entrer pour commencer");
  if(i==1) {textprintf(buffer, font,530,170, makecol(255, 0,0), "X");}
  if(i==2) {textprintf(buffer, font,530,190, makecol(255, 0,0), "X");}
  if(i==3) {textprintf(buffer, font,530,210, makecol(255, 0,0), "X");}
  if(j==1) {textprintf(buffer, font,490,320, makecol(255, 0,0), "X");}
  if(j==2) {textprintf(buffer, font,490,340, makecol(255, 0,0), "X");}
  if(j==3) {textprintf(buffer, font,490,360, makecol(255, 0,0), "X");}
  
  
  blit(buffer,screen,1366,768,0,0,SCREEN_W,SCREEN_H);
  rest(100);
  if(key[KEY_Q]) 
  {
   longueurlab=0;    //pour qu'il ny ait pas de labyrinthe
   i=1;
  }
  if(key[KEY_W])  
  {
   longueurlab=4;
   labx[0]=0;   labx[1]=0;   labx[2]=795; labx[3]=0;
   laby[0]=0;   laby[1]=0;   laby[2]=0;   laby[3]=595;   
   labx2[0]=800;labx2[1]=5; labx2[2]=800;labx2[3]=800; 
   laby2[0]=5; laby2[1]=600;laby2[2]=600;laby2[3]=600;
   i=2;
  }
  if(key[KEY_E])
  {
   longueurlab=10;
   labx[0]=0; labx[1]=0; labx[2]=0;  labx[3]=0;  labx[4]=700;labx[5]=787;labx[6]=787;labx[7]=700; labx[8]=250; labx[9]=250;    //coordonnées en x du labyrinthe
   laby[0]=0; laby[1]=0; laby[2]=500;laby[3]=587;laby[4]=0;  laby[5]=0;  laby[6]=500;laby[7]=587; laby[8]=200; laby[9]=375;  //coordonnées en y du labyrinthe
   labx2[0]=100;labx2[1]=13; labx2[2]=13; labx2[3]=100; labx2[4]=800;labx2[5]=800; labx2[6]=800;labx2[7]=800; labx2[8]=500; labx2[9]=500;
   laby2[0]=13; laby2[1]=100;laby2[2]=600;laby2[3]=600; laby2[4]=13; laby2[5]=100; laby2[6]=600;laby2[7]=600; laby2[8]=225; laby2[9]=400;
   i=3;
  }
  if(key[KEY_A])  {v=55; j=1; }
  if(key[KEY_S])  {v=35; j=2; }
  if(key[KEY_D])  {v=20; j=3; }
  clear_bitmap(buffer);
 } 
} END_OF_FUNCTION(intro);

void creationpomme()
{
 x_pomme=rand()%780+5;  //Pour tirer un nombre entre 5 et 785
 y_pomme=rand()%580+5;  //Pour tirer un nombre entre 5 et 585 
 for(i=0;i<longueurlab;i++)
 {
  while((labx[i]-2<=x_pomme)&&(x_pomme<=labx2[i]+2)&&(laby[i]-2<=y_pomme)&&(y_pomme<=laby2[i]+2))
  {
    x_pomme=rand()%780+5;  //Pour tirer un nombre entre 5 et 785
    y_pomme=rand()%580+5;  //Pour tirer un nombre entre 5 et 585 
  }
 }
 apaspomme=0;
} END_OF_FUNCTION(creationpomme); 
 

void testqueue()
{
 for(i=0;i<longueur;i++)     // test pour voir si le serpent touche sa queue
 {
  for(j=0;j<i;j++)  //test qui évite d'avoir i=j auquel cas il y aurait forcement 1
  {
   if ((positionx[i]==positionx[j]) &&(positiony[i]==positiony[j]))
   {
    stop=1;
   }
  }
  for(j=i+1;j<longueur;j++)
  {
   if ((positionx[i]==positionx[j]) &&(positiony[i]==positiony[j]))
   {
    stop=1;
   }
  }
 }  
} END_OF_FUNCTION(testqueue); 


void dessinelab()   //dessinne le labyrinthe
{
 for(i=0;i<longueurlab;i++)
 {
  rectfill(labyrinthe, labx[i],laby[i],labx2[i],laby2[i], makecol(0,0,255));
 }
} END_OF_FUNCTION(dessinelab);  



void testlab()
{
 for(i=0;i<longueurlab;i++)
 {
  if ((labx[i]-3<=positionx[0])&&(positionx[0]<=labx2[i]+3)&&(laby[i]-3<=positiony[0])&&(positiony[0]<=laby2[i]+3))
  {
   stop=1;
  }
 }
}  END_OF_FUNCTION(testlab);   



void deplacement()
{
 for(i=longueur;i>0;i--)
 {  
  positionx[i]=positionx[i-1];
  positiony[i]=positiony[i-1];
 } 
 positionx[0]=positionx[0]+dx;
 positiony[0]=positiony[0]+dy;
   
 for(i=0;i<longueur;i++)
 {
  rectfill(buffer,positionx[i],positiony[i],positionx[i]+8,positiony[i]+8,makecol(255,255,255));
 }  
 textprintf_centre(buffer, font, 40, 5, makecol(100, 255, 100), "score: %d ",score);
   
 if (positionx[0]+5>796) {positionx[0]=5;}  //Si le serpent touche un bord
 if (positiony[0]>596)   {positiony[0]=5;}
 if (positionx[0]<4)     {positionx[0]=796;}
 if (positiony[0]<-3)    {positiony[0]=596;}
} END_OF_FUNCTION(deplacement);
